package inter

import (
	"gamesdk/clock"
	"gamesdk/msg"
	"time"

	"github.com/golang/protobuf/proto"
)

//逻辑通知框架消息
type TableInter interface {
	//写日志,userId 0 系统日志 其他为用户日志
	WriteLogs(userId int64, content string)
	//获取跑马灯配置
	GetMarqueeConfig() (configs []*msg.MarqueeConfig)

	//创建跑马灯， nickName 昵称, gold 金额, special 特殊条件
	CreateMarquee(nickName string, gold int64, special string, ruleId int64) error
	/*
	*获取奖金池
	*参数说明:
	*@param:ration	万分比
	*@param:userId	用户id
	*返回值
	*第一个 int64:总共的值
	*第二个 int64:实际赢的数量
	*error 错误
	 */
	GetCollect(ration int32, userId int64) (int64, int64, error)
	//获取等级
	GetLevel() int32
	//获取房间税收
	GetRoomRate() int64
	//获取局号
	GetGameNum() string
	//获取房间id -1为没有初始化房间id
	GetRoomID() int64
	//获取入场限制 -1为没有初始化入场限制
	GetEntranceRestrictions() int64
	//获取平台id -1为没有平台id
	GetPlatformID() int64
	//获取自定义配置
	GetAdviceConfig() string
	//获取血池
	GetRoomProb() (int32, error)
	/*
	*大厅广播消息
	*参数说明:
	 */
	BroadcastAll(subCmd int32, pb proto.Message) error

	/*
	*获取机器人
	 */
	GetRobot(int32) error
	/*
	*获取桌子编号
	*返回值说明:
	*@return:int   		编号
	 */
	GetId() int

	/*
	*绑定游戏逻辑
	*参数说明:
	*@param:GameInter	游戏逻辑接口对象
	 */
	BindGame(GameInter)

	/*
	*开始游戏
	 */
	StartGame()

	/*
	*结束游戏
	 */
	EndGame()

	/*
	*提出用户
	*参数说明:
	*@param:UserInetr	用户接口对象
	 */
	KickOut(user UserInetr)

	/*
	*通知桌子下的所有用户
	*参数说明:
	*@param:subCmd		消息类型
	*@param:pb		消息内容
	 */
	Broadcast(subCmd int32, pb proto.Message)

	/*
	*是否开赛
	*返回值说明:
	*@return:bool   	是否可以开赛
	 */
	//IsStart() bool

	/*
	*添加一次性定时器
	*参数说明:
	*@param:interval	time.Duration时间
	*@param:jobFunc		回调业务函数
	*返回值说明:
	*@return:job   		定时器任务对象
	*@return:ok   		是否成功
	 */
	AddTimer(interval time.Duration, jobFunc func()) (job *clock.Job, ok bool)

	/*
	*添加多次定时器
	*参数说明:
	*@param:interval	time.Duration时间
	*@param:num			执行次数
	*@param:jobFunc		回调业务函数
	*返回值说明:
	*@return:job   		定时器任务对象
	*@return:ok   		是否成功
	 */
	AddTimerRepeat(interval time.Duration, num uint64, jobFunc func()) (job *clock.Job, inserted bool)
}
